package com.gin.no_gay_alliance.utils;

import android.app.Activity;
import android.content.Context;
import android.text.Editable;
import android.widget.EditText;

/**
 * @author : ginstone
 * @version : v1.0.0
 * @since : 2023/8/8 10:22
 **/
public class EditTextUtils {

    /**
     * 自动获取焦点，如果输入框有内容，全选，否则激活输入法
     *
     * @param context 上下文
     * @param et      EditText
     */
    public static void focusSelect(Context context, EditText et, MyHandler handler) {
        // 自动获取焦点
        handler.post(et::requestFocus);
        int length = et.getText().toString().length();
        if (length > 0) {
            et.setSelection(0, length);
        } else {
            InputMethodManagerUtils.show(handler, et);
        }
    }

    /**
     * 自动获取焦点，激活输入法
     *
     * @param activity 活动
     * @param et       EditText
     */
    public static void focus(Activity activity, EditText et, MyHandler handler) {
        // 自动获取焦点
        handler.post(et::requestFocus);
        InputMethodManagerUtils.show(handler, et);
    }

    /**
     * 在选中位置的前后(光标位置)插入文本
     *
     * @param start   在选中位置之前的文本
     * @param end     在选中位置之后的文本
     * @param et      EditText 组件
     * @param handler handler
     */
    public static void insert(String start, String end, EditText et, MyHandler handler) {
        int endIndex = et.getSelectionEnd();
        int startIndex = et.getSelectionStart();
        Editable text = et.getText();
        if (end != null) {
            handler.post(() -> text.insert(endIndex, end));
        }
        if (start != null) {
            handler.post(() -> {
                text.insert(startIndex, start);
                // 设置光标位置
                et.setSelection(endIndex + start.length());
            });
        }
    }

    /**
     * 在指定位置插入文本
     *
     * @param index   位置
     * @param text    文本
     * @param et      EditText组件
     * @param handler handler
     */
    public static void insert(int index, String text, EditText et, MyHandler handler) {
        handler.post(() -> et.getText().insert(index, text));
    }

}
